import CryptoJS from "crypto-js"
import md5 from 'js-md5';
//默认自定义的约定密钥(与设备端密钥保持一致)
// 加密密钥的计算方法：
// 1.对鉴权成功后返回的时间戳进行一次md5的哈希处理(32位小写模式)。
// 2.截取第1步获取的md5的后16位作为加密密钥。
// 3.加密的方式使用AES128的CBC加密方法，加密密钥为第2步获得的加密密钥，偏移量为16字节的0x00。
const secretKey = uni.getStorageSync('secretKey') || "";
const KEY = CryptoJS.enc.Hex.parse(secretKey); //  内容可自定义  16位长度字符（Hex格式）
const IV = CryptoJS.enc.Hex.parse('00000000000000000000000000000000'); //密钥偏移量    16位长度字符（Hex格式）

/**
 * AES对称加密 （CBC模式，需要偏移量）
 * @param {Object} params 明文参数
 */
export const AESEncrypt = (str) => {
	let key = KEY
	let iv = IV

	const hexString = CryptoJS.enc.Hex.parse(str);;

	const encrypted = CryptoJS.AES.encrypt(hexString, key, {
		iv: iv,
		mode: CryptoJS.mode.CBC,
		padding: CryptoJS.pad.Pkcs7
	});

	return encrypted.ciphertext.toString();
}

// md5的哈希处理(32位小写模式)
export function calculateMd5(str) {
	return md5(str);
}